Message data transfer

ABSTRACT

In one embodiment, a method includes receiving a request to send data to a user. The data exceeds a message size limit of a delivery channel associated with the user. The method also includes converting the data into a number of messages that each conform to the message size limit; and sending the number of messages through the delivery channel.

TECHNICAL FIELD

This disclosure generally relates to delivering messages to a user.

BACKGROUND

A social-networking system, which may include a social-networkingwebsite, may enable its users (such as persons or organizations) tointeract with it and with each other through it. The social-networkingsystem may, with input from a user, create and store in thesocial-networking system a user profile associated with the user. Theuser profile may include demographic information, communication-channelinformation, and information on personal interests of the user. Thesocial-networking system may also, with input from a user, create andstore a record of relationships of the user with other users of thesocial-networking system, as well as provide services (e.g., wall posts,photo-sharing, event organization, messaging, games, or advertisements)to facilitate social interaction between or among users.

The social-networking system may send over one or more networks contentor messages related to its services to a mobile or other computingdevice of a user. A user may also install software applications on amobile or other computing device of the user for accessing a userprofile of the user and other data within the social-networking system.The social-networking system may generate a personalized set of contentobjects to display to a user, such as a newsfeed of aggregated storiesof other users connected to the user.

A mobile computing device—such as a smartphone, tablet computer, orlaptop computer—may include functionality for determining its location,direction, or orientation, such as a GPS receiver, compass, gyroscope,or accelerometer. Such a device may also include functionality forwireless communication, such as BLUETOOTH communication, near-fieldcommunication (NFC), or infrared (IR) communication or communicationwith a wireless local area networks (WLANs) or cellular-telephonenetwork. Such a device may also include one or more cameras, scanners,touchscreens, microphones, or speakers. Mobile computing devices mayalso execute software applications, such as games, web browsers, orsocial-networking applications. With social-networking applications,users may connect, communicate, and share information with other usersin their social networks.

SUMMARY OF PARTICULAR EMBODIMENTS

In particular embodiments, a message-providing system may deliver datato a client device using a data-bandwidth-limited or long-pollinginterface (e.g., notifications). Messages may be used to trigger anapplication to display some data to users. Messages may also trigger anetwork fetch to update the mailbox of a messaging service. Inparticular embodiments, data may be sent to a client device by breakingup a message into multiple push messages, if size of the data exceedsthe size or payload limit of the messaging protocol. The messages mayinclude sequence data to determine the relationship between the multiplepush messages, so that the content of the push messages may be used toreconstruct the data sent to the user. The messages may include acheck-sum or other error detection data to determine the receivedmessages contain all the information needed to reconstruct the data.Embedded images or attachments may be separately fetched after thecontent is displayed to the user.

In particular embodiments, a server may determine there is data to besent to the user. The server may analyze the data to determine whichcomponents should be sent to a client device and which components may bestored for subsequent fetching (e.g., large attachments) by the clientdevice. The server may parse the content into portions that arecompatible with the payload limit of a delivery channel and create achecksum to ensure message integrity. The messages may also be encryptedfor security or privacy. In particular embodiments, the messages may bemulticast using multiple network protocols (e.g., cellular and WI-FInetworks). The client device may receive the multiple messages and inferif any of the messages were not received or were corrupted. Theinference may be performed using a Reed-Solomon or other suitable errorcorrection algorithm. In particular embodiments, the client device maydisplay a partial preview of message after a pre-determined period oftime.

The embodiments disclosed above are only examples, and the scope of thisdisclosure is not limited to them. Particular embodiments may includeall, some, or none of the components, elements, features, functions,operations, or steps of the embodiments disclosed above. Embodimentsaccording to the invention are in particular disclosed in the attachedclaims directed to a method, a storage medium, a system and a computerprogram product, wherein any feature mentioned in one claim category,e.g. method, can be claimed in another claim category, e.g. system, aswell. The dependencies or references back in the attached claims arechosen for formal reasons only. However any subject matter resultingfrom a deliberate reference back to any previous claims (in particularmultiple dependencies) can be claimed as well, so that any combinationof claims and the features thereof are disclosed and can be claimedregardless of the dependencies chosen in the attached claims. Thesubject-matter which can be claimed comprises not only the combinationsof features as set out in the attached claims but also any othercombination of features in the claims, wherein each feature mentioned inthe claims can be combined with any other feature or combination ofother features in the claims. Furthermore, any of the embodiments andfeatures described or depicted herein can be claimed in a separate claimand/or in any combination with any embodiment or feature described ordepicted herein or with any of the features of the attached claims.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1A illustrates an example network environment associated with asocial-networking system.

FIG. 1B illustrates an example architecture for delivering notificationsto a user.

FIG. 2 illustrates an example embodiment of a message-providing system.

FIG. 3 illustrates an example method for transferring data throughmessages.

FIG. 4 illustrates an example computer system.

DESCRIPTION OF EXAMPLE EMBODIMENTS

In particular embodiments, data may be delivered to a client deviceusing a data-bandwidth-limited or long-polling interface (e.g., messagesor notifications). As described below, notifications may be used tosignal a native application of the client device to display data touser. Notifications that are pushed to a client device may trigger theclient device to retrieve data and update a mailbox of a messagingservice. In particular embodiments, content may be sent to a user andonce fully sent to the client device, a message or notificationassociated with the content may be sent to the client device.

In particular embodiments, a message-providing system may delivermessages or notifications to a user in a user-aware manner. Suchmessages or notifications may be sent through one or more deliverychannels, e.g., sent by one or more communication media (e.g., shortmessaging service (SMS) messages, multimedia messaging service (MMS)messages, electronic mail (e-mail), particular application, or voice) toone or more unique endpoints (e.g., a telephone number, an e-mailaddress, a particular client device as specified by a unique deviceidentifier, a particular user account for the particular application orclient device). In particular embodiments, the message-providing systemmay be implemented as part of a social-networking system that may handlerequests from third-party systems to deliver notifications to a user ofthe social-networking system in a user-aware manner. Thesocial-networking system may register one or more delivery channels fordelivery of messages to the user. Upon receiving one or more requests tosend content to the user, the social-networking system may assess theuser's current delivery context with respect to the registered deliverychannels and determine a delivery policy to be applied to therequest(s). The social-networking system may then handle the requests inaccordance with the delivery policy, which may include sending at leastone message to the user in fulfillment of the requests.

In particular embodiments, a policy engine of the message-providingsystem may assess different factors in order to determine the deliverypolicy (e.g., the delivery instructions) for a message. For anyparticular notification, the policy engine may assess not only (1)information associated with the message (e.g., the source, the content,or the format) and (2) information associated with a particular user(e.g., demographic information for the user, the user's location, theuser's available delivery channels and the status thereof, the user'scurrent delivery context, user profile information, or social-networkinginformation for the user).

In particular embodiments, a registration service of themessage-providing system may collect and store information sent by adevice of the user upon enabling a new delivery channel (a communicationmedium-endpoint combination). For example, if the user installs asoftware application on their computing device through which messagesmay be delivered, the application may send registration information backto the registration service indicating that a new delivery channel isnow available for this particular user—that a new communication medium(e.g., a particular application) is available for a particular endpoint(e.g., the computing device). The registration information may include,by way of example and not limitation: a unique identifier for theendpoint, features and capabilities of the endpoint (e.g., audio-visualspecifications, battery capacity, or network connectivityspecifications), a unique identifier for the communication medium,features and capabilities of the communication medium (e.g., maximummessage size, data transfer allotment, or maximum bandwidth), or aunique identifier for the installed instance of the softwareapplication.

FIG. 1A illustrates an example network environment 100 associated with asocial-networking system. Network environment 100 includes a clientsystem 130, a social-networking system 160, and a third-party system 170connected to each other by a network 110. Although FIG. 1A illustrates aparticular arrangement of client system 130, social-networking system160, third-party system 170, and network 110, this disclosurecontemplates any suitable arrangement of client system 130,social-networking system 160, third-party system 170, and network 110.As an example and not by way of limitation, two or more of client system130, social-networking system 160, and third-party system 170 may beconnected to each other directly, bypassing network 110. As anotherexample, two or more of client system 130, social-networking system 160,and third-party system 170 may be physically or logically co-locatedwith each other in whole or in part. Moreover, although FIG. 1Aillustrates a particular number of client systems 130, social-networkingsystems 160, third-party systems 170, and networks 110, this disclosurecontemplates any suitable number of client systems 130,social-networking systems 160, third-party systems 170, and networks110. As an example and not by way of limitation, network environment 100may include multiple client system 130, social-networking systems 160,third-party systems 170, and networks 110.

This disclosure contemplates any suitable network 110. As an example andnot by way of limitation, one or more portions of network 110 mayinclude an ad hoc network, an intranet, an extranet, a virtual privatenetwork (VPN), a local area network (LAN), a wireless LAN (WLAN), a widearea network (WAN), a wireless WAN (WWAN), a metropolitan area network(MAN), a portion of the Internet, a portion of the Public SwitchedTelephone Network (PSTN), a cellular telephone network, or a combinationof two or more of these. Network 110 may include one or more networks110.

Links 150 may connect client system 130, social-networking system 160,and third-party system 170 to communication network 110 or to eachother. This disclosure contemplates any suitable links 150. Inparticular embodiments, one or more links 150 include one or morewireline (such as for example Digital Subscriber Line (DSL) or Data OverCable Service Interface Specification (DOCSIS)), wireless (such as forexample Wi-Fi or Worldwide Interoperability for Microwave Access(WiMAX)), or optical (such as for example Synchronous Optical Network(SONET) or Synchronous Digital Hierarchy (SDH)) links. In particularembodiments, one or more links 150 each include an ad hoc network, anintranet, an extranet, a VPN, a LAN, a WLAN, a WAN, a WWAN, a MAN, aportion of the Internet, a portion of the PSTN, a cellulartechnology-based network, a satellite communications technology-basednetwork, another link 150, or a combination of two or more such links150. Links 150 need not necessarily be the same throughout networkenvironment 100. One or more first links 150 may differ in one or morerespects from one or more second links 150.

In particular embodiments, client system 130 may be an electronic deviceincluding hardware, software, or embedded logic components or acombination of two or more such components and capable of carrying outthe appropriate functionalities implemented or supported by clientsystem 130. As an example and not by way of limitation, a client system130 may include a computer system such as a desktop computer, notebookor laptop computer, netbook, a tablet computer, e-book reader, globalpositioning system (GPS) device, digital camera, personal digitalassistant (PDA), handheld electronic device, cellular telephone,smartphone, augmented/virtual reality device, other suitable electronicdevice, or any suitable combination thereof. This disclosurecontemplates any suitable client systems 130. A client system 130 mayenable a network user at client system 130 to access network 110. Aclient system 130 may enable its user to communicate with other users atother client systems 130.

In particular embodiments, client system 130 may include a web browser132, such as MICROSOFT EDGE, MICROSOFT INTERNET EXPLORER, GOOGLE CHROME,or MOZILLA FIREFOX, and may have one or more add-ons, plug-ins, or otherextensions, such as TOOLBAR or YAHOO TOOLBAR. A user at client system130 may enter a Uniform Resource Locator (URL) or other addressdirecting the web browser 132 to a particular server (such as server162, or a server associated with a third-party system 170), and the webbrowser 132 may generate a Hyper Text Transfer Protocol (HTTP) requestand communicate the HTTP request to server. The server may accept theHTTP request and communicate to client system 130 one or more Hyper TextMarkup Language (HTML) files responsive to the HTTP request. Clientsystem 130 may render a webpage based on the HTML files from the serverfor presentation to the user. This disclosure contemplates any suitablewebpage files. As an example and not by way of limitation, webpages mayrender from HTML files, Extensible Hyper Text Markup Language (XHTML)files, or Extensible Markup Language (XML) files, according toparticular needs. Such pages may also execute scripts such as, forexample and without limitation, those written in JAVASCRIPT, JAVA,MICROSOFT SILVERLIGHT, combinations of markup language and scripts suchas AJAX (Asynchronous JAVASCRIPT and XML), and the like. Herein,reference to a webpage encompasses one or more corresponding webpagefiles (which a browser may use to render the webpage) and vice versa,where appropriate.

In particular embodiments, social-networking system 160 may be anetwork-addressable computing system that can host an online socialnetwork. Social-networking system 160 may generate, store, receive, andsend social-networking data, such as, for example, user-profile data,concept-profile data, social-graph information, or other suitable datarelated to the online social network. Social-networking system 160 maybe accessed by the other components of network environment 100 eitherdirectly or via network 110. As an example and not by way of limitation,client system 130 may access social-networking system 160 using a webbrowser 132, or a native application associated with social-networkingsystem 160 (e.g., a mobile social-networking application, a messagingapplication, another suitable application, or any combination thereof)either directly or via network 110. In particular embodiments,social-networking system 160 may include one or more servers 162. Eachserver 162 may be a unitary server or a distributed server spanningmultiple computers or multiple datacenters. Servers 162 may be ofvarious types, such as, for example and without limitation, web server,news server, mail server, message server, advertising server, fileserver, application server, exchange server, database server, proxyserver, another server suitable for performing functions or processesdescribed herein, or any combination thereof. In particular embodiments,each server 162 may include hardware, software, or embedded logiccomponents or a combination of two or more such components for carryingout the appropriate functionalities implemented or supported by server162. In particular embodiments, social-networking system 160 may includeone or more data stores 164. Data stores 164 may be used to storevarious types of information. In particular embodiments, the informationstored in data stores 164 may be organized according to specific datastructures. In particular embodiments, each data store 164 may be arelational, columnar, correlation, or other suitable database. Althoughthis disclosure describes or illustrates particular types of databases,this disclosure contemplates any suitable types of databases. Particularembodiments may provide interfaces that enable a client system 130, asocial-networking system 160, or a third-party system 170 to manage,retrieve, modify, add, or delete, the information stored in data store164.

In particular embodiments, social-networking system 160 may store one ormore social graphs in one or more data stores 164. In particularembodiments, a social graph may include multiple nodes—which may includemultiple user nodes (each corresponding to a particular user) ormultiple concept nodes (each corresponding to a particular concept)—andmultiple edges connecting the nodes. Social-networking system 160 mayprovide users of the online social network the ability to communicateand interact with other users. In particular embodiments, users may jointhe online social network via social-networking system 160 and then addconnections (e.g., relationships) to a number of other users ofsocial-networking system 160 to whom they want to be connected. Herein,the term “friend” may refer to any other user of social-networkingsystem 160 with whom a user has formed a connection, association, orrelationship via social-networking system 160.

In particular embodiments, social-networking system 160 may provideusers with the ability to take actions on various types of items orobjects, supported by social-networking system 160. As an example andnot by way of limitation, the items and objects may include groups orsocial networks to which users of social-networking system 160 maybelong, events or calendar entries in which a user might be interested,computer-based applications that a user may use, transactions that allowusers to buy or sell items via the service, interactions withadvertisements that a user may perform, or other suitable items orobjects. A user may interact with anything that is capable of beingrepresented in social-networking system 160 or by an external system ofthird-party system 170, which is separate from social-networking system160 and coupled to social-networking system 160 via a network 110.

In particular embodiments, social-networking system 160 may be capableof linking a variety of entities. As an example and not by way oflimitation, social-networking system 160 may enable users to interactwith each other as well as receive content from third-party systems 170or other entities, or to allow users to interact with these entitiesthrough an application programming interfaces (API) or other deliverychannels.

In particular embodiments, a third-party system 170 may include one ormore types of servers, one or more data stores, one or more interfaces,including but not limited to APIs, one or more web services, one or morecontent sources, one or more networks, or any other suitable components,e.g., that servers may communicate with. A third-party system 170 may beoperated by a different entity from an entity operatingsocial-networking system 160. In particular embodiments, however,social-networking system 160 and third-party systems 170 may operate inconjunction with each other to provide social-networking services tousers of social-networking system 160 or third-party systems 170. Inthis sense, social-networking system 160 may provide a platform, orbackbone, which other systems, such as third-party systems 170, may useto provide social-networking services and functionality to users acrossthe Internet.

In particular embodiments, a third-party system 170 may include athird-party content object provider. A third-party content objectprovider may include one or more sources of content objects, which maybe communicated to a client system 130. As an example and not by way oflimitation, content objects may include information regarding things oractivities of interest to the user, such as, for example, movie showtimes, movie reviews, restaurant reviews, restaurant menus, productinformation and reviews, or other suitable information. As anotherexample and not by way of limitation, content objects may includeincentive content objects, such as coupons, discount tickets, giftcertificates, or other suitable incentive objects.

In particular embodiments, social-networking system 160 also includesuser-generated content objects, which may enhance a user's interactionswith social-networking system 160. User-generated content may includeanything a user can add, upload, send, or “post” to social-networkingsystem 160. As an example and not by way of limitation, a usercommunicates posts to social-networking system 160 from a client system130. Posts may include data such as status updates or other textualdata, location information, photos, videos, links, music or othersimilar data or media. Content may also be added to social-networkingsystem 160 by a third-party through a “delivery channel,” such as anewsfeed or stream.

In particular embodiments, social-networking system 160 may include avariety of servers, sub-systems, programs, modules, logs, and datastores. In particular embodiments, social-networking system 160 mayinclude one or more of the following: a web server, action logger,API-request server, relevance-and-ranking engine, content-objectclassifier, notification controller, action log,third-party-content-object-exposure log, inference module,authorization/privacy server, search module, advertisement-targetingmodule, user-interface module, user-profile store, connection store,third-party content store, or location store. Social-networking system160 may also include suitable components such as network interfaces,security mechanisms, load balancers, failover servers,management-and-network-operations consoles, other suitable components,or any suitable combination thereof.

In particular embodiments, a server of social-networking system 160 mayreceive a request to send content to client system 130 of a user. Datamay be sent to client system 130 by fracturing the data into multiplepush notifications. As an example and not by way of limitation, if thesize of the data exceeds the size or payload limit of notifications(e.g., between approximately 1 kB to approximately 4 kB), the data maybe fractured into multiple push notifications that includes the contentand some sequence data. The sequence data may be used to define therelationship between the notifications, so that the data of thenotifications may be used by client system 130 to reconstruct the sentcontent. In particular embodiments, the notifications may include achecksum or other error detection data to determine the receivednotifications include all of the information required to reconstruct thedata. Embedded images or attachments may be separately fetched after thedata provided by the notifications is displayed to the user.

In particular embodiments, the server of social-networking system 160may analyze the data to be sent to the user to determine which portionof the data should be sent to one or more endpoints of the user andwhich portions may be stored for subsequent fetching (e.g., largeattachments) by the user. As described below, the server may parse thedata into portions that are compatible with the payload limit of one ormore delivery channels and include a checksum to ensure messageintegrity. As an example and not by way of limitation, the messages maybe multicast using multiple network protocols (e.g., cellular and WI-FInetworks). In particular embodiments, the messages may be encrypted bythe server for security or privacy.

In particular embodiments, social-networking system 160 may include oneor more user-profile stores for storing user profiles. A user profilemay include, for example, biographic information, demographicinformation, behavioral information, social information, or other typesof descriptive information, such as work experience, educationalhistory, hobbies or preferences, interests, affinities, or location.Interest information may include interests related to one or morecategories. Categories may be general or specific. As an example and notby way of limitation, if a user “likes” an article about a brand ofshoes the category may be the brand, or the general category of “shoes”or “clothing.” A connection store may be used for storing connectioninformation about users. The connection information may indicate userswho have similar or common work experience, group memberships, hobbies,educational history, or are in any way related or share commonattributes. The connection information may also include user-definedconnections between different users and content (both internal andexternal). A web server may be used for linking social-networking system160 to one or more client systems 130 or one or more third-party system170 via network 110. The web server may include a mail server or othermessaging functionality for receiving and routing messages betweensocial-networking system 160 and one or more client systems 130. AnAPI-request server may allow a third-party system 170 to accessinformation from social-networking system 160 by calling one or moreAPIs. An action logger may be used to receive communications from a webserver about a user's actions on or off social-networking system 160. Inconjunction with the action log, a third-party-content-object log may bemaintained of user exposures to third-party-content objects. Anotification controller may provide information regarding contentobjects to a client system 130. Information may be pushed to a clientsystem 130 as notifications, or information may be pulled from clientsystem 130 responsive to a request received from client system 130.Authorization servers may be used to enforce one or more privacysettings of the users of social-networking system 160. A privacy settingof a user determines how particular information associated with a usercan be shared. The authorization server may allow users to opt in to oropt out of having their actions logged by social-networking system 160or shared with other systems (e.g., third-party system 170), such as,for example, by setting appropriate privacy settings. In particularembodiments, the data sent to the user may correspond to gatekeeper orconfiguration updates, data triggering a forced logout from a particularsystem, data revoking a login on a particular system, revoking or editmessages. These actions may be performed based on opt-in settings of theuser stored on the authorization servers. Third-party-content-objectstores may be used to store content objects received from third parties,such as a third-party system 170. Location stores may be used forstoring location information received from client systems 130 associatedwith users. Advertisement-pricing modules may combine socialinformation, the current time, location information, or other suitableinformation to provide relevant advertisements, in the form ofnotifications, to a user.

FIG. 1B illustrates an example architecture for delivering messages to auser. Messages may be used to signal an application of a client deviceto display some data to users. Messages may also be used to trigger anetwork fetch for updating a mailbox associated with a particularmessaging service. In an example embodiment described herein, elementsof the message-providing system may be implemented as part of asocial-networking system, and the message-providing system may handledelivery of messages generated by third-party systems as well as by thesocial-networking system itself. In particular embodiments, elements ofthe message-providing system may be implemented as part of a third-partysystem.

In particular embodiments, data may be sent to a client system byreusing a persistently available data channel (e.g., a push notificationinterface). As an example and not by way of limitation, data may be sentto a client system through multiple messages on one or more deliverychannels described below. Data that exceeds the payload limit of aparticular delivery channel may be fractured into multiple messages thateach conform to the payload limit of the particular delivery channel(e.g., approximately 20 MB for e-mail). As an example and not by way oflimitation, data that exceeds the payload size of push notifications maybe fractured into multiple push notifications, while the same data maybe less than the payload size of an e-mail message and may be sent inone e-mail message. In particular embodiments, the sequence data may beused by the endpoint of user to determine the relationship between themultiple messages, so that the received data is reconstructed using thecontent of the messages. The messages may include a checksum or othererror-detection data to determine the received messages contain all theinformation needed to reconstruct the sent data. In particularembodiments, embedded images or attachments included with the data maybe separately fetched after the data is displayed on an endpoint of theuser.

As shown in FIG. 1B, messages may be delivered by way of a number ofdifferent delivery channels 140. As discussed above, a delivery channel140 may comprise one or more uniquely-identified endpoints 142 and oneor more communication media 144. As shown in FIG. 1B, messages may bedelivered by one or more communication media (e.g., SMS, MMS, e-mail,particular application (e.g., social-networking application), voice,newsfeed, or flag) to one or more unique endpoints (e.g., a telephonenumber, an e-mail address, a particular client device as specified by aunique device identifier, a particular user account for the particularapplication or for the client device). In some embodiments, a particularcommunication media may deliver a message to more than one endpoint—forexample, a mobile social-networking application installed on the user'ssmartphone client device 130A (a first endpoint) and a correspondingdesktop social-networking application on the user's desktop computer130B (a second endpoint). As another example, a third-party applicationsuch as SNAPCHAT (communication media) may be installed on the user'ssmartphone client device 130A (a first endpoint) and a correspondingweb-based version on the user's desktop 130B (a second endpoint). Asdescribed above, the messages may be multicast using multiple networkprotocols (e.g., cellular and WI-FI networks). The communication mediamay be a push-type medium, such as for example SMS or e-mail, or it maybe a pull-type medium, such as newsfeed.

In particular embodiments, the message-providing system may selectdifferent delivery channels for sending messages based on the user'savailable delivery channels and the status thereof. As an example andnot by way of limitation, high-bandwidth content (e.g., ahigh-definition (HD) video clip) may be sent to a particular endpoint142 using multiple messages. As another example, an application oroperating system (OS) update may be sent to an appropriate endpoint 142using multiple messages. As discussed above, the information about theuser's available delivery channels may be retrieved from theregistration data store (e.g., information to enable themessage-providing system to deliver the notification to asocial-networking application). In particular embodiments, a server ofsocial-networking system 160 may analyze the content to determine whichcomponents should be sent to the client device and which components maybe stored for subsequent fetching (e.g., large attachments) by endpoint142. In particular embodiments, one or more of the user's availabledelivery channels may be selected to send the content to the clientdevice based on the analysis of the content, the delivery policy of theuser (described below), or a combination thereof.

One or more of the user's endpoints 142 may receive the multiplemessages corresponding to data sent to the user. Sequence data of themessages may be used to determine the relationship between the messages,so that the content of the messages may be used to reconstruct the sentdata. As described above, the messages may include a check-sum or othererror detection data to determine the received push messages containsall the information needed to re-assemble the data. In particularembodiments, endpoints 142 may infer if any of the messages sent by themessage-providing system were not received or were corrupted by usingany suitable error-detection or error-correction algorithm. Inparticular embodiments, the inference may be performed using theReed-Solomon error-correction algorithm. In particular embodiments, apartial preview of the data may be displayed on endpoints 142 after apre-determined period of time. Embedded images or attachments may beseparately fetched after the data is displayed to the user.

In particular embodiments, one or more of the content objects of theonline social network may be associated with a privacy setting. Theprivacy settings (or “access settings”) for an object may be stored inany suitable manner, such as, for example, in association with theobject, in an index on an authorization server, in another suitablemanner, or any combination thereof. A privacy setting of an object mayspecify how the object (or particular information associated with anobject) can be accessed (e.g., viewed or shared) using the online socialnetwork. Where the privacy settings for an object allow a particularuser to access that object, the object may be described as being“visible” with respect to that user. As an example and not by way oflimitation, a user of the online social network may specify privacysettings for a user-profile page identify a set of users that may accessthe work experience information on the user-profile page, thus excludingother users from accessing the information. In particular embodiments,the privacy settings may specify a “blocked list” of users that shouldnot be allowed to access certain information associated with the object.In other words, the blocked list may specify one or more users orentities for which an object is not visible. As an example and not byway of limitation, a user may specify a set of users that may not accessphotos albums associated with the user, thus excluding those users fromaccessing the photo albums (while also possibly allowing certain usersnot within the set of users to access the photo albums). In particularembodiments, privacy settings may be associated with particularsocial-graph elements. Privacy settings of a social-graph element, suchas a node or an edge, may specify how the social-graph element,information associated with the social-graph element, or content objectsassociated with the social-graph element can be accessed using theonline social network. As an example and not by way of limitation, aparticular concept node 204 corresponding to a particular photo may havea privacy setting specifying that the photo may only be accessed byusers tagged in the photo and their friends. In particular embodiments,privacy settings may allow users to opt in or opt out of having theiractions logged by social-networking system 160 or shared with othersystems (e.g., third-party system 170). In particular embodiments, theprivacy settings associated with an object may specify any suitablegranularity of permitted access or denial of access. As an example andnot by way of limitation, access or denial of access may be specifiedfor particular users (e.g., only me, my roommates, and my boss), userswithin a particular degrees-of-separation (e.g., friends, orfriends-of-friends), user groups (e.g., the gaming club, my family),user networks (e.g., employees of particular employers, students oralumni of particular university), all users (“public”), no users(“private”), users of third-party systems 170, particular applications(e.g., social-networking applications, third-party applications,messaging applications, or external websites), other suitable users orentities, or any combination thereof. Although this disclosure describesusing particular privacy settings in a particular manner, thisdisclosure contemplates using any suitable privacy settings in anysuitable manner.

In particular embodiments, one or more servers 162 may beauthorization/privacy servers for enforcing privacy settings. Asdescribed above, data sent to the user may correspond to gatekeeper orconfiguration updates, data triggering a forced logout from a particularsystem, data revoking a login on a particular system, revoking or editmessages. These messages may be sent to client system 130 based onopt-in settings of the user stored on the authorization servers. As anexample and not by way of limitation, if the user opt-ins to allowmessages to be edited, a subsequent message sent to endpoint 142 of theuser may replace one or more of the previously sent messages withrevised content. In response to a request from a user (or other entity)for a particular object stored in a data store 164 that corresponds toan embedded object or a portion of one or more messages,social-networking system 160 may send a request to the data store 164for the object. The request may identify the user associated with therequest and may only be sent to the user (or a client system 130 of theuser) if the authorization server determines that the user is authorizedto access the object based on the privacy settings associated with theobject. If the requesting user is not authorized to access the object,the authorization server may prevent the requested object from beingretrieved from the data store 164, or may prevent the requested objectfrom be sent to the user. In the search query context, an object mayonly be generated as a search result if the querying user is authorizedto access the object. In other words, the object must have a visibilitythat is visible to the querying user. If the object has a visibilitythat is not visible to the user, the object may be excluded from thesearch results. Although this disclosure describes enforcing privacysettings in a particular manner, this disclosure contemplates enforcingprivacy settings in any suitable manner.

FIG. 2 illustrates an example embodiment of a message-providing system220. A message provider 210 may provide messages 212A-D for delivery.Message provider 210 may include the social-networking system, athird-party system, or another system providing message content to bedelivered by the message-providing system. In the example embodimentillustrated in FIG. 2, messages 212 may all be targeted to the sameuser, yet delivered differently, due to differences in the currentcontext, the user's social-networking information relating to thecontent of the message, the user's past history of interacting withmessages sent by a particular source, etc. In particular embodiments,policy engine 222 of message-providing system 220 may assess informationassociated with messages 212 (e.g., the source, the content, or theformat). Such information may be provided within the content of messages212 or as associated metadata.

In particular embodiments, the policy engine 222 may also assessinformation associated with a particular user (e.g., demographicinformation for the user, the user's location, the user's availabledelivery channels 140A-D and the status thereof, the user's currentdelivery context, user profile information, or social-networkinginformation for the user). The policy engine 222 may retrieveinformation about the user's available delivery channels 140 fromregistration data store 232. Information such as the demographicinformation for the user, user profile information, or social-networkinginformation for the user may be retrieved as user data 234 and socialdata 238. Information about the user's current delivery context may beretrieved as context data 236—this category of information may cover anyaspect of the user's current delivery context, such as, by way ofexample and not limitation: information about: a location of the user, acalendar associated with the user, an indicated status of the user, ascheduled event associated with the location, a trajectory of the user,or a device status of one or more client devices associated with theuser.

In particular embodiments, policy engine 222 may also retrievehistorical notification information about this particular user'sresponses to past notifications (e.g., conversion rates for differentnotification/context/delivery patterns) and about prior context/deliverypatterns (if any) for the current messages (and interaction levels, ifany, for those prior context/delivery patterns) from history service224. Once policy engine 222 has considered the relevant factors andproduced a policy to be applied to messages 212, message deliveryservice 240 may handle formatting and delivering messages 212 inaccordance with the context/delivery pattern specified in the deliverypolicy.

Message delivery service 240 may generate an appropriate form ofmessages 212 for delivery through a delivery channel 140, based on thefeatures and capabilities of the underlying medium and endpoint. As anexample and not by way of limitation, e-mail may have a size or payloadlimit of 20 MB, while notifications may have a size or payload limit of1-4 kB. In particular embodiments, message delivery service 240 mayfracture the data into multiple e-mail messages that are each 20 MB orless, while generating notifications of 4 kB or less for the same data.In particular embodiments, embedded images or attachments that are partof the data may be separately fetched from social-networking system 160or third-party system 170.

Message delivery service 240 may schedule messages 212 for delivery upondetecting a particular user delivery context (e.g., upon detecting thatthe user has begun actively using a particular endpoint appropriate forthe data being sent; size or bandwidth of the content being delivered;or upon determining that the user is using a particular applicationassociated with messages 212). As an example and not by way oflimitation, data corresponding to a update for an application of amobile phone may be scheduled for delivery when message delivery service240 detects a mobile phone of the user is powered on. As anotherexample, data corresponding to high-bandwidth HD content may bescheduled for delivery when message delivery service 240 detects theuser is using a high-performance computer. As another example, datacorresponding an OS update may be scheduled for delivery when messagedelivery service 240 detects the appropriate client system is poweredon.

After having delivered the messages to delivery channels 140, userinteraction data 214A-D may be sent back to an interaction handlingservice 250, which sends the user interaction data 214A-D on to historyservice 224. History service 224 of the message-providing system maycollect and analyze the user's responses to past notifications in orderto determine the user's level of interaction (if any) with the pastmessages. Information about the user's responses to past messages may bestored in historical notification data store 230.

FIG. 3 illustrates an example method 300 for transferring data throughnotifications. In step 310, a computing system may receive a request tosend data to a user. In particular embodiments, the computing system maybe a social-networking system and the data to be sent may exceed amessage size limit of a delivery channel. In particular embodiments, thedelivery channel is determined based on a delivery policy.

In step 320, the computing system converts the data into a number ofmessages. In particular embodiments, each message conforms to themessage size limit of the message-providing system. As an example andnot by way of limitation, the message-size limit may correspond to apayload size of a notification, which may be approximately 4 kB. Asanother example, the message-size limit may correspond to a payload sizeof an e-mail message.

In step 325, the computing system may determine a first subset of thedata to convert to the number of messages and stores a second subset ofthe data. In particular embodiments, the second subset of the data maycorrespond to a portion of the data for subsequent downloading by theuser. As an example and not by way of limitation, the messages sent tothe user may include a link to download the stored second subset of thedata.

In step 330, the computing system sends the messages through thedelivery channel. As an example and not by way of limitation, anapplication for installation on a client system may be sent as multiplepush notifications to a particular endpoint of the user. In step 335, asubsequent message may be sent through the delivery channel. Inparticular embodiments, the subsequent message corresponds to areplacement portion to replace a portion of the data. As an example andnot by way of limitation, the subsequent message may be a replacement toone or more of the messages sent in step 330 that corresponds to arevision of the data being sent to the user.

Particular embodiments may repeat one or more steps of the method ofFIG. 3, where appropriate. Although this disclosure describes andillustrates particular steps of the method of FIG. 3 as occurring in aparticular order, this disclosure contemplates any suitable steps of themethod of FIG. 3 occurring in any suitable order. Moreover, althoughthis disclosure describes and illustrates an example method for methodfor transferring data through messages including the particular steps ofthe method of FIG. 3, this disclosure contemplates any suitable methodfor transferring data through messages including any suitable steps,which may include all, some, or none of the steps of the method of FIG.3, where appropriate. Furthermore, although this disclosure describesand illustrates particular components, devices, or systems carrying outparticular steps of the method of FIG. 3, this disclosure contemplatesany suitable combination of any suitable components, devices, or systemscarrying out any suitable steps of the method of FIG. 3.

FIG. 4 illustrates an example computer system 400. In particularembodiments, one or more computer systems 400 perform one or more stepsof one or more methods described or illustrated herein. In particularembodiments, one or more computer systems 400 provide functionalitydescribed or illustrated herein. In particular embodiments, softwarerunning on one or more computer systems 400 performs one or more stepsof one or more methods described or illustrated herein or providesfunctionality described or illustrated herein. Particular embodimentsinclude one or more portions of one or more computer systems 400.Herein, reference to a computer system may encompass a computing device,and vice versa, where appropriate. Moreover, reference to a computersystem may encompass one or more computer systems, where appropriate.

This disclosure contemplates any suitable number of computer systems400. This disclosure contemplates computer system 400 taking anysuitable physical form. As example and not by way of limitation,computer system 400 may be an embedded computer system, a system-on-chip(SOC), a single-board computer system (SBC) (such as, for example, acomputer-on-module (COM) or system-on-module (SOM)), a desktop computersystem, a laptop or notebook computer system, an interactive kiosk, amainframe, a mesh of computer systems, a mobile telephone, a personaldigital assistant (PDA), a server, a tablet computer system, anaugmented/virtual reality device, or a combination of two or more ofthese. Where appropriate, computer system 400 may include one or morecomputer systems 400; be unitary or distributed; span multiplelocations; span multiple machines; span multiple data centers; or residein a cloud, which may include one or more cloud components in one ormore networks. Where appropriate, one or more computer systems 400 mayperform without substantial spatial or temporal limitation one or moresteps of one or more methods described or illustrated herein. As anexample and not by way of limitation, one or more computer systems 400may perform in real time or in batch mode one or more steps of one ormore methods described or illustrated herein. One or more computersystems 400 may perform at different times or at different locations oneor more steps of one or more methods described or illustrated herein,where appropriate.

In particular embodiments, computer system 400 includes a processor 402,memory 404, storage 406, an input/output (I/O) interface 408, acommunication interface 410, and a bus 412. Although this disclosuredescribes and illustrates a particular computer system having aparticular number of particular components in a particular arrangement,this disclosure contemplates any suitable computer system having anysuitable number of any suitable components in any suitable arrangement.

In particular embodiments, processor 402 includes hardware for executinginstructions, such as those making up a computer program. As an exampleand not by way of limitation, to execute instructions, processor 402 mayretrieve (or fetch) the instructions from an internal register, aninternal cache, memory 404, or storage 406; decode and execute them; andthen write one or more results to an internal register, an internalcache, memory 404, or storage 406. In particular embodiments, processor402 may include one or more internal caches for data, instructions, oraddresses. This disclosure contemplates processor 402 including anysuitable number of any suitable internal caches, where appropriate. Asan example and not by way of limitation, processor 402 may include oneor more instruction caches, one or more data caches, and one or moretranslation lookaside buffers (TLBs). Instructions in the instructioncaches may be copies of instructions in memory 404 or storage 406, andthe instruction caches may speed up retrieval of those instructions byprocessor 402. Data in the data caches may be copies of data in memory404 or storage 406 for instructions executing at processor 402 tooperate on; the results of previous instructions executed at processor402 for access by subsequent instructions executing at processor 402 orfor writing to memory 404 or storage 406; or other suitable data. Thedata caches may speed up read or write operations by processor 402. TheTLBs may speed up virtual-address translation for processor 402. Inparticular embodiments, processor 402 may include one or more internalregisters for data, instructions, or addresses. This disclosurecontemplates processor 402 including any suitable number of any suitableinternal registers, where appropriate. Where appropriate, processor 402may include one or more arithmetic logic units (ALUs); be a multi-coreprocessor; or include one or more processors 402. Although thisdisclosure describes and illustrates a particular processor, thisdisclosure contemplates any suitable processor.

In particular embodiments, memory 404 includes main memory for storinginstructions for processor 402 to execute or data for processor 402 tooperate on. As an example and not by way of limitation, computer system400 may load instructions from storage 406 or another source (such as,for example, another computer system 400) to memory 404. Processor 402may then load the instructions from memory 404 to an internal registeror internal cache. To execute the instructions, processor 402 mayretrieve the instructions from the internal register or internal cacheand decode them. During or after execution of the instructions,processor 402 may write one or more results (which may be intermediateor final results) to the internal register or internal cache. Processor402 may then write one or more of those results to memory 404. Inparticular embodiments, processor 402 executes only instructions in oneor more internal registers or internal caches or in memory 404 (asopposed to storage 406 or elsewhere) and operates only on data in one ormore internal registers or internal caches or in memory 404 (as opposedto storage 406 or elsewhere). One or more memory buses (which may eachinclude an address bus and a data bus) may couple processor 402 tomemory 404. Bus 412 may include one or more memory buses, as describedbelow. In particular embodiments, one or more memory management units(MMUs) reside between processor 402 and memory 404 and facilitateaccesses to memory 404 requested by processor 402. In particularembodiments, memory 404 includes random access memory (RAM). This RAMmay be volatile memory, where appropriate Where appropriate, this RAMmay be dynamic RAM (DRAM) or static RAM (SRAM). Moreover, whereappropriate, this RAM may be single-ported or multi-ported RAM. Thisdisclosure contemplates any suitable RAM. Memory 404 may include one ormore memories 404, where appropriate. Although this disclosure describesand illustrates particular memory, this disclosure contemplates anysuitable memory.

In particular embodiments, storage 406 includes mass storage for data orinstructions. As an example and not by way of limitation, storage 406may include a hard disk drive (HDD), a floppy disk drive, flash memory,an optical disc, a magneto-optical disc, magnetic tape, or a UniversalSerial Bus (USB) drive or a combination of two or more of these. Storage406 may include removable or non-removable (or fixed) media, whereappropriate. Storage 406 may be internal or external to computer system400, where appropriate. In particular embodiments, storage 406 isnon-volatile, solid-state memory. In particular embodiments, storage 406includes read-only memory (ROM). Where appropriate, this ROM may bemask-programmed ROM, programmable ROM (PROM), erasable PROM (EPROM),electrically erasable PROM (EEPROM), electrically alterable ROM (EAROM),or flash memory or a combination of two or more of these. Thisdisclosure contemplates mass storage 406 taking any suitable physicalform. Storage 406 may include one or more storage control unitsfacilitating communication between processor 402 and storage 406, whereappropriate. Where appropriate, storage 406 may include one or morestorages 406. Although this disclosure describes and illustratesparticular storage, this disclosure contemplates any suitable storage.

In particular embodiments, I/O interface 408 includes hardware,software, or both, providing one or more interfaces for communicationbetween computer system 400 and one or more I/O devices. Computer system400 may include one or more of these I/O devices, where appropriate. Oneor more of these I/O devices may enable communication between a personand computer system 400. As an example and not by way of limitation, anI/O device may include a keyboard, keypad, microphone, monitor, mouse,printer, scanner, speaker, still camera, stylus, tablet, touch screen,trackball, video camera, another suitable I/O device or a combination oftwo or more of these. An I/O device may include one or more sensors.This disclosure contemplates any suitable I/O devices and any suitableI/O interfaces 408 for them. Where appropriate, I/O interface 408 mayinclude one or more device or software drivers enabling processor 402 todrive one or more of these I/O devices. I/O interface 408 may includeone or more I/O interfaces 408, where appropriate. Although thisdisclosure describes and illustrates a particular I/O interface, thisdisclosure contemplates any suitable I/O interface.

In particular embodiments, communication interface 410 includeshardware, software, or both providing one or more interfaces forcommunication (such as, for example, packet-based communication) betweencomputer system 400 and one or more other computer systems 400 or one ormore networks. As an example and not by way of limitation, communicationinterface 410 may include a network interface controller (NIC) ornetwork adapter for communicating with an Ethernet or other wire-basednetwork or a wireless NIC (WNIC) or wireless adapter for communicatingwith a wireless network, such as a WI-FI network. This disclosurecontemplates any suitable network and any suitable communicationinterface 410 for it. As an example and not by way of limitation,computer system 400 may communicate with an ad hoc network, a personalarea network (PAN), a local area network (LAN), a wide area network(WAN), a metropolitan area network (MAN), or one or more portions of theInternet or a combination of two or more of these. One or more portionsof one or more of these networks may be wired or wireless. As anexample, computer system 400 may communicate with a wireless PAN (WPAN)(such as, for example, a BLUETOOTH WPAN), a WI-FI network, a WI-MAXnetwork, a cellular telephone network (such as, for example, a GlobalSystem for Mobile Communications (GSM) network), or other suitablewireless network or a combination of two or more of these. Computersystem 400 may include any suitable communication interface 410 for anyof these networks, where appropriate. Communication interface 410 mayinclude one or more communication interfaces 410, where appropriate.Although this disclosure describes and illustrates a particularcommunication interface, this disclosure contemplates any suitablecommunication interface.

In particular embodiments, bus 412 includes hardware, software, or bothcoupling components of computer system 400 to each other. As an exampleand not by way of limitation, bus 412 may include an AcceleratedGraphics Port (AGP) or other graphics bus, an Enhanced Industry StandardArchitecture (EISA) bus, a front-side bus (FSB), a HYPERTRANSPORT (HT)interconnect, an Industry Standard Architecture (ISA) bus, an INFINIBANDinterconnect, a low-pin-count (LPC) bus, a memory bus, a Micro ChannelArchitecture (MCA) bus, a Peripheral Component Interconnect (PCI) bus, aPCI-Express (PCIe) bus, a serial advanced technology attachment (SATA)bus, a Video Electronics Standards Association local (VLB) bus, oranother suitable bus or a combination of two or more of these. Bus 412may include one or more buses 412, where appropriate. Although thisdisclosure describes and illustrates a particular bus, this disclosurecontemplates any suitable bus or interconnect.

Herein, a computer-readable non-transitory storage medium or media mayinclude one or more semiconductor-based or other integrated circuits(ICs) (such, as for example, field-programmable gate arrays (FPGAs) orapplication-specific ICs (ASICs)), hard disk drives (HDDs), hybrid harddrives (HHDs), optical discs, optical disc drives (ODDs),magneto-optical discs, magneto-optical drives, floppy diskettes, floppydisk drives (FDDs), magnetic tapes, solid-state drives (SSDs),RAM-drives, SECURE DIGITAL cards or drives, any other suitablecomputer-readable non-transitory storage media, or any suitablecombination of two or more of these, where appropriate. Acomputer-readable non-transitory storage medium may be volatile,non-volatile, or a combination of volatile and non-volatile, whereappropriate.

Herein, “or” is inclusive and not exclusive, unless expressly indicatedotherwise or indicated otherwise by context. Therefore, herein, “A or B”means “A, B, or both,” unless expressly indicated otherwise or indicatedotherwise by context. Moreover, “and” is both joint and several, unlessexpressly indicated otherwise or indicated otherwise by context.Therefore, herein, “A and B” means “A and B, jointly or severally,”unless expressly indicated otherwise or indicated otherwise by context.

The scope of this disclosure encompasses all changes, substitutions,variations, alterations, and modifications to the example embodimentsdescribed or illustrated herein that a person having ordinary skill inthe art would comprehend. The scope of this disclosure is not limited tothe example embodiments described or illustrated herein. Moreover,although this disclosure describes and illustrates respectiveembodiments herein as including particular components, elements,feature, functions, operations, or steps, any of these embodiments mayinclude any combination or permutation of any of the components,elements, features, functions, operations, or steps described orillustrated anywhere herein that a person having ordinary skill in theart would comprehend. Furthermore, reference in the appended claims toan apparatus or system or a component of an apparatus or system beingadapted to, arranged to, capable of, configured to, enabled to, operableto, or operative to perform a particular function encompasses thatapparatus, system, component, whether or not it or that particularfunction is activated, turned on, or unlocked, as long as thatapparatus, system, or component is so adapted, arranged, capable,configured, enabled, operable, or operative.

What is claimed is:
 1. A method comprising: by a computing device,receiving a request to send data to a user, wherein the data exceeds amessage size limit of a delivery channel associated with the user; bythe computing device, converting the data into a plurality of messagesthat each conform to the message size limit; and by the computingdevices, sending the plurality of messages through the delivery channel.2. The method of claim 1, wherein each of the messages comprisesinformation about an ordering sequence of the messages.
 3. The method ofclaim 1, wherein at least one of the messages comprises error-detectioninformation.
 4. The method of claim 1, wherein at least one of themessages comprises information to detect one or more missing orcorrupted messages.
 5. The method of claim 4, wherein the informationcorresponds to information of a Reed-Solomon code.
 6. The method ofclaim 1, further comprising: determining a first subset of the data toconvert to the plurality of messages; and storing a second subset of thedata, wherein the second subset corresponds to a portion of the data forsubsequent downloading.
 7. The method of claim 6, wherein one or more ofthe notifications comprises a link to download the second subset of thedata.
 8. The method of claim 6, wherein the second subset of the datacomprises an embedded image or attachment.
 9. The method of claim 6,wherein the second subset of the data exceeds the size limit of thedelivery channel.
 10. The method of claim 1, further comprisingencrypting each of the notifications prior to sending.
 11. The method ofclaim 1, further comprising sending a subsequent message, wherein thesubsequent message corresponds to a replacement portion to replace aportion of the data.
 12. The method of claim 1, wherein the datacorresponds to a gatekeeper update, configuration update, forced logoutof a particular system, or revoked login of a particular system.
 13. Themethod of claim 1, wherein: the plurality of messages comprise aplurality of notifications sent in accordance to a delivery policy; andthe delivery policy comprises: when to send the identified notificationsto the user; or identification of a particular subset of a plurality ofendpoints of the user to send the notifications to; or identification ofthe delivery channel to send the notifications to the user in.
 14. Themethod of claim 13, wherein the delivery channel comprises a WI-FI andcellular network.
 15. The method of claim 1, wherein the notificationsare sent in accordance with privacy settings of the user.
 16. The methodof claim 1, wherein: the delivery channel comprise a communication mediaand an endpoint; one or more of the delivery channels is associated witha mobile computing device; and the data is reconstructed from thereceived messages by a native application of the mobile computingdevice.
 17. The method of claim 1, wherein the size limit corresponds toa payload size of a notification.
 18. The method of claim 17, whereinthe payload size is in a range of approximately 1 kilobytes toapproximately 4 kilobytes.
 19. One or more computer-readablenon-transitory storage media embodying software configured when executedto: receive a request to send data to a user, wherein the data exceeds amessage size limit of a delivery channel associated with the user;convert the data into a plurality of messages that each conform to themessage size limit; and send the plurality of messages through thedelivery channel.
 20. A device comprising: one or more processors; andone or more computer-readable non-transitory storage media coupled tothe processors and embodying software configured when executed to:receive a request to send data to a user, wherein the data exceeds amessage size limit of a delivery channel associated with the user;convert the data into a plurality of messages that each conform to themessage size limit; and send the plurality of messages through thedelivery channel.